<?php
require 'vendor/autoload.php'; // 引入 Composer 自动加载器
require 'db.php'; // 包含数据库连接
include_once 'secret/jwt.php';

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

// 检查是否有 JWT
if (!isset($_COOKIE['token'])) {
    echo json_encode(['error' => '用户未登录']);
    exit();
}

$jwt = $_COOKIE['token'];

try {
    $decoded = JWT::decode($jwt, new Key($secretKey, 'HS256'));
    $username = $decoded->data->username;
} catch (Exception $e) {
    echo json_encode(['error' => '访问被拒绝: ' . $e->getMessage()]);
    exit();
}

// 检查是否有上传的文件
if (isset($_FILES['avatar'])) {
    $targetDir = "uploads/"; // 保存上传头像的目录
    $targetFile = $targetDir . basename($_FILES['avatar']['name']);
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));

    // 检查文件是否为图像
    if (getimagesize($_FILES['avatar']['tmp_name']) === false) {
        echo json_encode(['error' => '上传的文件不是图像。']);
        exit();
    }

    // 检查文件大小
    if ($_FILES['avatar']['size'] > 500000) { // 限制文件大小为 500KB
        echo json_encode(['error' => '文件过大，最大允许 500KB。']);
        exit();
    }

    // 允许的文件格式
    $allowedFormats = array('jpg', 'jpeg', 'png', 'gif');
    if (!in_array($imageFileType, $allowedFormats)) {
        echo json_encode(['error' => '仅支持 JPG, JPEG, PNG 和 GIF 格式的文件。']);
        exit();
    }

    // 如果存在同名文件，则重新命名
    $i = 1;
    while (file_exists($targetFile)) {
        $targetFile = $targetDir . pathinfo($_FILES['avatar']['name'], PATHINFO_FILENAME) . "_" . $i . "." . $imageFileType;
        $i++;
    }

    // 尝试移动文件到目标目录
    if (move_uploaded_file($_FILES['avatar']['tmp_name'], $targetFile)) {
        $avatarPath = $targetFile;

        // 将头像路径存储到数据库中
        $stmt = $conn->prepare("UPDATE users SET avatar_path = ? WHERE username = ?");
        $stmt->bind_param("ss", $avatarPath, $username);
        $stmt->execute();
        $stmt->close();

        // 返回头像路径
        echo json_encode(['avatarPath' => $avatarPath]);
    } else {
        echo json_encode(['error' => '上传文件时出错。']);
    }
} else {
    echo json_encode(['error' => '没有选择文件。']);
}
?>